﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using DataLayer.dbml;
using DataLayer.Controller;
using System.Configuration;
using System.Text;

public partial class home_DetalleServicio : cGlobal
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            //Se trae la info del caso
            this.hdnIdServicio.Value = Request.QueryString["id"].ToString();
            this.hdnNIT.Value = Request.QueryString["nit"].ToString();
            //this.hdnIdCasoSF.Value = "500Q0000002vmKO";

            //Trae el idCuenta del nit
            CUENTA cta = AccountController.GetCuentaByNit(this.hdnNIT.Value);
            string idCuenta = cta.ID_CUENTASFDC;
            string tipoCliente = cta.TIPO_CLIENTE;
            string nombre = cta.NOMBRE_CUENTA;

            this.getServicio(this.hdnIdServicio.Value.ToString(), idCuenta, tipoCliente, nombre);
        }
    }

    private void getServicio(string idServicio, string idCuenta, string tipoCliente, string nombre)
    {
        try
        {
            //Se determina el tipo de cliente
            ServicesController.TipoCliente tipoC = ServicesController.GetTipoClienteFromString(tipoCliente);

            DataTable dt = ServicesController.GetServiceDetail(idServicio, tipoC);
            if (dt.Rows.Count > 0)
            {
                
                this.lblCliente.Text = dt.Rows[0]["cliente"].ToString();
                if (tipoC == ServicesController.TipoCliente.FINALES)
                    this.lblProyecto.Text = nombre;
                else
                    this.lblProyecto.Text = dt.Rows[0]["proyecto"].ToString();
                this.lblNombreServicio.Text = dt.Rows[0]["nombre"].ToString();
                this.lblLocalizacion.Text = dt.Rows[0]["localizacion"].ToString();
                this.lblIdServicio.Text = dt.Rows[0]["idServicio"].ToString();
                this.lblIdServicioAliado.Text = dt.Rows[0]["idServicioAliado"].ToString();
                this.lblDuracion.Text = dt.Rows[0]["duracion"].ToString();
                this.lblEstado.Text = dt.Rows[0]["estado"].ToString();
                this.lblFechaFirma.Text = dt.Rows[0]["fechaFirma"].ToString();
                this.lblCPA.Text = dt.Rows[0]["cpa"].ToString();
                this.lblTecnologia.Text = dt.Rows[0]["tecnologia"].ToString();
                this.lblSatelite.Text = dt.Rows[0]["satelite"].ToString();
                this.lblTipoRegistro.Text = dt.Rows[0]["tipoRegistro"].ToString();
                this.lblFechaActivacion.Text = dt.Rows[0]["fechaActivacion"].ToString();
                this.lblDireccionIP.Text = dt.Rows[0]["direccionIP"].ToString();
                this.lblMascara.Text = dt.Rows[0]["mascara"].ToString();
                this.lblVLAN.Text = dt.Rows[0]["vlan"].ToString();
                this.lblCBR.Text = dt.Rows[0]["cbr"].ToString();
                this.lblDireccion.Text = dt.Rows[0]["direccion"].ToString();

                this.hdnEstado.Value = dt.Rows[0]["estado"].ToString();
                this.hdnIdServicioCorto.Value = dt.Rows[0]["idServicio"].ToString();


                //Obtiene los casos de este servicio
                DataTable dtCasos = CaseController.GetCaseDetail(idServicio, DataLayer.Utilities.PropertiesApp.Jerarquia.Servicio, "", idCuenta);
                this.Grid1.DataSource = dtCasos;
                this.Grid1.DataBind();

                //Obtiene la info del servicio para pintar el flujo
                SERVICIO serv = ServicesController.GetServiceById(dt.Rows[0]["idServicioSF"].ToString());

                this.lblIdServicio.Text = serv.ID_SERVICIO;
                this.lblFechaPreventa.Text = serv.FECHA_INSTALACION_PREVENTA.ToString();
                this.lblFechaProgramada.Text = serv.FECHA_PROGRAMADA_INSTALACION.ToString();
                this.lblFlujo.Text = serv.TIPO_FLUJO;
                if (serv.FECHA_PROGRAMADA_INSTALACION.HasValue)
                {
                    TimeSpan diff = serv.FECHA_PROGRAMADA_INSTALACION.Value.Subtract(DateTime.Today);
                    this.lblDiasFaltantes.Text = diff.Days.ToString();
                }

                this.paintFlow(serv);

            }

        }
        catch (Exception ex)
        {
            Page.ClientScript.RegisterStartupScript(this.GetType(), "JS", "<script language='javascript'>alert('No se pudo traer la informacion del servicio: " + ex.Message + "');</Script>");            
        }
    }

    protected void Grid1_RowDataBound(object sender, Obout.Grid.GridRowEventArgs e)
    {
        if (e.Row.RowType == Obout.Grid.GridRowType.DataRow)
        {
            HyperLink lnkComments = (HyperLink)e.Row.Cells[1].Controls[0].Controls[0].Controls[0].Controls[0].Controls[1];
            lnkComments.NavigateUrl = "Javascript:openShadowbox('" + ConfigurationManager.AppSettings["urlPortal"] + "/services/CaseComment.aspx?idCaso=" + DataBinder.Eval(e.Row.DataItem, "id_caso").ToString().Trim() + "','iframe','Detalle del caso',1100,750);";

        }
    }

    private void paintFlow(SERVICIO serv)
    {
        DataTable dtFlow = ServicesController.GetFlow(serv);

        if (dtFlow.Rows.Count == 0)
        {
            //this.lblMensaje.Text = "No se encontró el flujo de estados para este servicio";
            return;
        }

        string[] arrEstadosInstalacion = new string[] { "EQUIPOS ENTREGADOS PARA CONFIGURAR", "EQUIPOS CONFIGURADOS" };

        //Se valida que el estado actual del servicio existe en el flujo de estados
        bool encontroEstado = false;
        bool existeEstado = false;
        for (int i = 0; i < dtFlow.Rows.Count; i++)
        {
            //El estado "PROGRAMADO PARA INSTALACION" reúne otros estados
            if ((dtFlow.Rows[i]["ESTADO"].ToString() == serv.ESTADO_SERVICIO) || (arrEstadosInstalacion.Contains(dtFlow.Rows[i]["ESTADO"].ToString())))
            {
                existeEstado = true;
                break;
            }
        }


        if (existeEstado == true)
        {
            StringBuilder tablaFlujo = new StringBuilder();
            StringBuilder fila1 = new StringBuilder();
            StringBuilder fila2 = new StringBuilder();
            tablaFlujo.Append("<table align='center' cellpadding='0' cellspacing='0'>");
            fila1.Append("<tr style=\"background-position: center center; background-image: url('../images/line2.jpg'); background-repeat: no-repeat\">");
            fila2.Append("<tr>");


            //Recorre los pasos del flujo y va colocando imagen de completado hasta que llega al estado actual 
            //del servicio            
            for (int i = 0; i < dtFlow.Rows.Count; i++)
            {
                if (!encontroEstado)
                    fila1.Append("<td align='center'><span class='tooltip_text' href='#' onmousemove='showToolTip(event,\"" + dtFlow.Rows[i]["DESCRIPCION"].ToString() + "\");return false' onmouseout='hideToolTip()'><img src='../images/si.png' border='0' /></span></td><td>&nbsp;&nbsp;&nbsp;&nbsp;</td>");
                else
                    fila1.Append("<td align='center'><span class='tooltip_text' href='#' onmousemove='showToolTip(event,\"" + dtFlow.Rows[i]["DESCRIPCION"].ToString() + "\");return false' onmouseout='hideToolTip()'><img src='../images/no.png' border='0' /></span></td><td>&nbsp;&nbsp;&nbsp;&nbsp;</td>");

                fila2.Append("<td valign='top' align='center'>" + dtFlow.Rows[i]["ESTADO"].ToString() + "</td><td>&nbsp;</td>");

                if (dtFlow.Rows[i]["ESTADO"].ToString().Equals(serv.ESTADO_SERVICIO))
                    encontroEstado = true;
            }


            fila1.Append("</tr>");
            fila2.Append("</tr>");

            tablaFlujo.Append(fila1);
            tablaFlujo.Append(fila2);
            tablaFlujo.Append("</table>");

            this.litFlujo.Text = tablaFlujo.ToString();
        }
        else
        {
            //this.lblMensaje.Text = "Este estado no pertenece a ningún flujo de estados";
        }
    }

}
